package SecondeStage.FanShe;

import java.lang.reflect.Field;

public class ReflectAccessShuXing {
    public static void main(String[] args) throws Exception{
        //1. 得到Student类对应的 Class对象
        Class<?> stuClass = Class.forName("SecondeStage.FanShe.Student");
        //2. 创建对象
        Object o =stuClass.newInstance(); // o的运行类型就是Student
        System.out.println(o.getClass());
        //3. 使用反射得到age属性对象
        Field age =stuClass.getField("age");
        age.set(o,88); // 通过反射来操作属性
        System.out.println(o);
        System.out.println(age.get(o)); // 返回age属性的值
        //4. 使用反射操作name属性
        Field name = stuClass.getDeclaredField("name");
        //name.set(o,"老罗"); 报错,因为name是私有属性
        name.setAccessible(true); //那就暴破掉
        name.set(o,"老罗");
        System.out.println(name.get(o));
        name.set(null,"小菠萝"); // 因为name是static的属性，所以对象的位置可以写null
        System.out.println(name.get(null));
    }
}


class Student{
    public  int age;
    private static String name;

    public Student(){}

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                '}';
    }
}